We need each instance to only forward input to the right display.
This make the inspector work better.
struct _GdkBroadwayServer {
GObject parent_instance;
+ GdkDisplay *display;
guint32 next_serial;
guint32 next_texture_id;
}
GdkBroadwayServer *
-_gdk_broadway_server_new (const char *display, GError **error)
+_gdk_broadway_server_new (GdkDisplay *display,
+ const char *display_name,
+ GError **error)
{
GdkBroadwayServer *server;
GSocketClient *client;
char *local_socket_type = NULL;
int port;
- if (display == NULL)
- display = ":0";
+ if (display_name == NULL)
+ display_name = ":0";
- if (display[0] == ':' && g_ascii_isdigit(display[1]))
+ if (display_name[0] == ':' && g_ascii_isdigit(display_name[1]))
{
char *path, *basename;
- port = strtol (display + strlen (":"), NULL, 10);
+ port = strtol (display_name + strlen (":"), NULL, 10);
basename = g_strdup_printf ("broadway%d.socket", port + 1);
path = g_build_filename (g_get_user_runtime_dir (), basename, NULL);
g_free (basename);
else
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Broadway display type not supported: %s"), display);
+ _("Broadway display type not supported: %s"), display_name);
return NULL;
}
server = g_object_new (GDK_TYPE_BROADWAY_SERVER, NULL);
server->connection = connection;
+ server->display = display;
in = g_io_stream_get_input_stream (G_IO_STREAM (server->connection));
pollable = G_POLLABLE_INPUT_STREAM (in);
server->incomming);
if (reply->base.type == BROADWAY_REPLY_EVENT)
- _gdk_broadway_events_got_input (&reply->event.msg);
+ _gdk_broadway_events_got_input (server->display, &reply->event.msg);
else
g_warning ("Unhandled reply type %d", reply->base.type);
g_free (reply);
#define GDK_IS_BROADWAY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_SERVER))
#define GDK_BROADWAY_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_SERVER, GdkBroadwayServerClass))
-GdkBroadwayServer *_gdk_broadway_server_new (const char *display,
+GdkBroadwayServer *_gdk_broadway_server_new (GdkDisplay *display,
+ const char *display_name,
GError **error);
void _gdk_broadway_server_flush (GdkBroadwayServer *server);
void _gdk_broadway_server_sync (GdkBroadwayServer *server);
if (display_name == NULL)
display_name = g_getenv ("BROADWAY_DISPLAY");
- broadway_display->server = _gdk_broadway_server_new (display_name, &error);
+ broadway_display->server = _gdk_broadway_server_new (display, display_name, &error);
if (broadway_display->server == NULL)
{
g_printerr ("Unable to init Broadway server: %s\n", error->message);
}
void
-_gdk_broadway_events_got_input (BroadwayInputMsg *message)
+_gdk_broadway_events_got_input (GdkDisplay *display,
+ BroadwayInputMsg *message)
{
- GdkDisplay *display;
GdkBroadwayDisplay *display_broadway;
GdkSeat *seat;
GdkSurface *surface;
GdkEvent *event = NULL;
GList *node;
- GSList *list, *d;
-
- display = NULL;
-
- list = gdk_display_manager_list_displays (gdk_display_manager_get ());
- for (d = list; d; d = d->next)
- {
- if (GDK_IS_BROADWAY_DISPLAY (d->data))
- {
- display = d->data;
- break;
- }
- }
- g_slist_free (list);
-
- g_assert (display != NULL);
display_broadway = GDK_BROADWAY_DISPLAY (display);
seat = gdk_display_get_default_seat (display);
void _gdk_broadway_display_size_changed (GdkDisplay *display,
BroadwayInputScreenResizeNotify *msg);
-void _gdk_broadway_events_got_input (BroadwayInputMsg *message);
+void _gdk_broadway_events_got_input (GdkDisplay *display,
+ BroadwayInputMsg *message);
void _gdk_broadway_display_init_root_window (GdkDisplay *display);
void _gdk_broadway_display_init_dnd (GdkDisplay *display);